/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author JaHdAi
 */
package Almacenamiento;
import javax.swing.*;
import java.io.*;
import java.awt.event.*;
public class Indexado extends JFrame{
private JTextField cnombrearchivo, tupla, pagina, ccurp, cdireccion;
private JLabel lnombrearchivo, ltupla, lpagina, lcurp, ldireccion;
private JTextArea area;
private JScrollPane scroll;
private JButton abrir, nuevo, guardar, eliminar, buscar, imprimir, editar;
//objetos file donde se almacena los datos archivo es el supuesto archivo maestro;
//Indice es el archivo donde se alamacenan las curp;
File archivo, indice;
JFileChooser chooser;//filechoose para crear archivo nuevo y abrir archivos existentes.
DataInputStream dataread;//Para leer archivo.
DataInputStream datareadIn;//Para leer el archivo indice.
DataOutputStream datawrite;//para escribir en el archivo.
DataOutputStream datawriteIn;//para escribir en el archivo indice.
public Indexado(){
super("Efra");
this.setSize(350, 510);
this.setLocation(100, 100);
this.setResizable(false);
this.setLayout(null);
this.setDefaultCloseOperation(3);
componentes();
}
void componentes(){
lcurp = new JLabel("Curp");
add(lcurp);
lcurp.setBounds(10, 10, 150, 25);
lnombrearchivo = new JLabel("Nombre Archivo");
add(lnombrearchivo);
lnombrearchivo.setBounds(10, 40, 150, 25);
ltupla = new JLabel("Tupla");
add(ltupla);
ltupla.setBounds(10, 70, 150, 25);
lpagina = new JLabel("Pagina");
add(lpagina);
lpagina.setBounds(10, 100, 150, 25);
ldireccion = new JLabel("Direccion");
add(ldireccion);
ldireccion.setBounds(10, 130, 150, 25);

ccurp = new JTextField();
add(ccurp);
ccurp.setBounds(140, 10, 205, 25);
cnombrearchivo = new JTextField();
add(cnombrearchivo);
cnombrearchivo.setBounds(140, 40, 205, 25);
tupla = new JTextField();
add(tupla);
tupla.setBounds(140, 70, 205, 25);
pagina = new JTextField();
add(pagina);
pagina.setBounds(140, 100, 205, 25);
cdireccion = new JTextField();
add(cdireccion);
cdireccion.setBounds(140, 130, 205, 25);

abrir = new JButton("Abrir");
add(abrir);
abrir.setBounds(5, 390, 90, 25);

guardar = new JButton("Guardar");
add(guardar);
guardar.setBounds(110, 390, 100, 25);
guardar.setEnabled(false);

eliminar = new JButton("Eliminar");
add(eliminar);
eliminar.setBounds(225, 390, 90, 25);
eliminar.setEnabled(false);
nuevo = new JButton("Nuevo");
add(nuevo);
nuevo.setBounds(5, 420, 90, 25);
buscar = new JButton("Buscar");
add(buscar);
buscar.setBounds(225, 420, 90, 25);
buscar.setEnabled(false);
imprimir = new JButton("Imprimir");
add(imprimir);
imprimir.setBounds(110, 420, 100, 25);
imprimir.setEnabled(false);
editar = new JButton("Editar");
add(editar);
editar.setBounds(5, 450, 90, 25);
area = new JTextArea();
add(area);
area.setBounds(5, 160, 340, 220);
scroll = new JScrollPane(area);
add(scroll);
scroll.setBounds(5, 160, 340, 220);
eventos();
}
void eventos(){
abrir.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
chooser = new JFileChooser();
chooser.showOpenDialog(chooser);
archivo = chooser.getSelectedFile();
JOptionPane.showMessageDialog(null,"Abra el archivo de indice");
chooser.showOpenDialog(chooser);
indice = chooser.getSelectedFile();

nuevo.setEnabled(false);
abrir.setEnabled(false);
imprimir.setEnabled(true);
guardar.setEnabled(true);
eliminar.setEnabled(true);
buscar.setEnabled(true);
}
});
guardar.addActionListener(new ActionListener(){
public void actionPerformed (ActionEvent e){
String curp;

boolean cierto = false;
if(ccurp.getText().equals("")||cnombrearchivo.getText().equals("")||tupla.getText().equals("")||pagina.getText().equals("")||cdireccion.getText().equals("")){
JOptionPane.showMessageDialog(null,"Todos los campos son obligatorios");
}else{
try{
datareadIn = new DataInputStream(new FileInputStream(indice));
while(datareadIn!=null){
curp = datareadIn.readUTF();

if(ccurp.getText().equals(curp)){
cierto = true;
break;
}
}
}catch(IOException ioe){}
if(cierto == true){
JOptionPane.showMessageDialog(null, "Ya se encuentra registrado");
}else{
try{
datawriteIn = new DataOutputStream(new FileOutputStream(indice, true));
datawrite = new DataOutputStream(new FileOutputStream(archivo,true));
datawrite.writeUTF(ccurp.getText());
datawrite.writeUTF(cnombrearchivo.getText());
datawrite.writeUTF(tupla.getText());
datawrite.writeUTF(pagina.getText());
datawrite.writeUTF(cdireccion.getText());
datawriteIn.writeUTF(ccurp.getText());

limpiar();
}catch(FileNotFoundException fnfe){}
catch(IOException eq){}
}
}



}
});
nuevo.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
chooser = new JFileChooser();
chooser.showSaveDialog(chooser);
archivo = chooser.getSelectedFile();
try{
String www = archivo.getCanonicalPath();
indice = new File(www+"index");
}catch(IOException ioee){}

nuevo.setEnabled(false);
abrir.setEnabled(false);
imprimir.setEnabled(true);
guardar.setEnabled(true);
eliminar.setEnabled(true);
buscar.setEnabled(true);
}
});
imprimir.addActionListener(new ActionListener(){
String curp, nombre, apellido1, apellido2, direccion;
public void actionPerformed(ActionEvent e){
area.setText("");

try{
dataread = new DataInputStream(new FileInputStream(archivo));
while(dataread!=null){
curp = dataread.readUTF();
nombre = dataread.readUTF();
apellido1 = dataread.readUTF();
apellido2 = dataread.readUTF();
direccion = dataread.readUTF();
area.append(curp+" "+nombre+" "+apellido1+" "+apellido2+" "+direccion+"n");
}
}catch(FileNotFoundException fnf){}
catch(IOException ioe){}

}
});
editar.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
DataInputStream arch = null;
DataOutputStream archtemp = null;
String ib ="";
String curp, nombre, apellido1, apellido2, direccion;
try{
ib = archivo.getCanonicalPath();
archtemp = new DataOutputStream(new FileOutputStream(ib+"te",true));
arch = new DataInputStream(new FileInputStream(archivo));
while(arch!=null){
curp = arch.readUTF();
nombre = arch.readUTF();
apellido1 = arch.readUTF();
apellido2 = arch.readUTF();
direccion = arch.readUTF();
if(ccurp.getText().equals(curp)){
archtemp.writeUTF(curp);
archtemp.writeUTF(JOptionPane.showInputDialog(null,"Nombre"));
archtemp.writeUTF(JOptionPane.showInputDialog(null,"Apellido Paterno"));
archtemp.writeUTF(JOptionPane.showInputDialog(null,"Apellido Materno"));
archtemp.writeUTF(JOptionPane.showInputDialog(null,"Direccion"));

}else{
archtemp.writeUTF(curp);
archtemp.writeUTF(nombre);
archtemp.writeUTF(apellido1);
archtemp.writeUTF(apellido2);
archtemp.writeUTF(direccion);
}

}
}catch(IOException iow){}
try{
arch.close();
archtemp.close();


File file2 = new File(ib+"te");
if(archivo.exists()){archivo.delete();};
file2.renameTo(archivo);
JOptionPane.showMessageDialog(null,"Terminado");
}catch(IOException va){}
}
});
buscar.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
String curp, nombre, apellido1, apellido2, direccion;
area.setText("");
try{
dataread = new DataInputStream(new FileInputStream(archivo));
while(dataread!=null){
curp = dataread.readUTF();
nombre = dataread.readUTF();
apellido1 = dataread.readUTF();
apellido2 = dataread.readUTF();
direccion = dataread.readUTF();
if(ccurp.getText().equals(curp)){
area.append(curp+" "+nombre+" "+apellido1+" "+apellido2+" "+direccion+"n");
break;
}

}
}catch(FileNotFoundException fnf){}
catch(IOException ioe){}
}
});
eliminar.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
DataInputStream arch = null;
DataOutputStream archtemp = null;
String ib ="";
String curp, nombre, apellido1, apellido2, direccion;
try{
ib = archivo.getCanonicalPath();
archtemp = new DataOutputStream(new FileOutputStream(ib+"te",true));
arch = new DataInputStream(new FileInputStream(archivo));
while(arch!=null){
curp = arch.readUTF();
nombre = arch.readUTF();
apellido1 = arch.readUTF();
apellido2 = arch.readUTF();
direccion = arch.readUTF();
if(ccurp.getText().equals(curp)){
continue;

}else{
archtemp.writeUTF(curp);
archtemp.writeUTF(nombre);
archtemp.writeUTF(apellido1);
archtemp.writeUTF(apellido2);
archtemp.writeUTF(direccion);
}

}
}catch(IOException iow){}
try{
arch.close();
archtemp.close();


File file2 = new File(ib+"te");
if(archivo.exists()){archivo.delete();};
file2.renameTo(archivo);
JOptionPane.showMessageDialog(null,"Terminado");
}catch(IOException va){}
eliminarIndex();
}
});
}

void eliminarIndex(){
DataInputStream arch = null;
DataOutputStream archtemp = null;
String ib ="";
String curp;
try{
ib = archivo.getCanonicalPath();
archtemp = new DataOutputStream(new FileOutputStream(ib+"i",true));
arch = new DataInputStream(new FileInputStream(indice));
while(arch!=null){
curp = arch.readUTF();

if(ccurp.getText().equals(curp)){
continue;

}else{
archtemp.writeUTF(curp);

}

}
}catch(IOException iow){}
try{
arch.close();
archtemp.close();


File file2 = new File(ib+"te");
if(indice.exists()){indice.delete();};
file2.renameTo(indice);

}catch(IOException va){}
}
void limpiar(){
ccurp.setText("");
cnombrearchivo.setText("");
tupla.setText("");
pagina.setText("");
cdireccion.setText("");
}
}


public static void main(String args[]){
    static Indexado app;
    app = new Indexado();
    app.setVisible(true);
}
